package com.hyj.jpdy.job;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.core.task.TaskExecutor;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;

import com.hyj.jpdy.job.RunModle.JokeModle;
import com.hyj.jpdy.job.RunModle.RssModle;
import com.hyj.jpdy.job.RunModle.SinaModle;
import com.hyj.jpdy.service.IGrapService;

//@Service
public class HotspotGrap {
	Log log = LogFactory.getLog(HotspotGrap.class);
	{
		Thread t = Thread.currentThread();
		
		log.info(t);
	}
	@Autowired
	@Qualifier("executor")
	TaskExecutor excuter;
	
	@Autowired
    private IGrapService grapService;
	
	
	@Scheduled(cron="0 0 10 * * ? ")
	public void grapJoke(){
		 log.info("抓取笑话" );
		 excuter.execute(new JokeModle(grapService));
	
	}
	
	@Scheduled(cron="0 0/30 0-23 * * ?")
	public void grapRss(){
		 log.info("rss  开始抓取了" );
		 excuter.execute(new RssModle(grapService));
	
	}
	
	
	@Scheduled(cron="0 0/10 0-23 * * ? ")
	public void grapSina(){
		 log.info("抓取新浪新闻" );
		 excuter.execute(new SinaModle(grapService));
	
	}
	
	//@Scheduled(fixedRate = 50000000) 
	public void test(){
		Thread t = Thread.currentThread();
		log.info("============================"+t.getName());
		
		for (int i = 0;i<10;i++){
		excuter.execute(new Runnable(){

			@Override
			public void run() {
				Thread t = Thread.currentThread();
				System.out.println(excuter+"  我的线程在运行"+t.getName());
				
				try {
					Thread.sleep(2);
				} catch (InterruptedException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
			
		});
		}
	}
	
	/**
	 * 一个cron表达式有至少6个（也可能7个）有空格分隔的时间元素。
	 * 秒  分  时  天（0~31，需要考虑月份） 月(0~11) 天(星期, 1~7 1=SUN 或 SUN，MON，TUE，WED，THU，FRI，SAT)
	 * 其中每个元素可以是一个值(如6),一个连续区间(9-12),一个间隔时间(8-18/4)(/表示每隔4小时),一个列表(1,3,5),通配符。
	 * 由于"月份中的日期"和"星期中的日期"这两个元素互斥的,必须要对其中一个设置? ,也就是 第4个或者 第6个必须有个?
        '*'  字符代表所有可能的值 
        “/”字符用来指定数值的增量 
                例如：在子表达式（分钟）里的“0/15”表示从第0分钟开始，每15分钟 
                               在子表达式（分钟）里的“3/20”表示从第3分钟开始，每20分钟（它和“3，23，43”）的含义一样 


	 * @Scheduled(fixedRate = 1000)  -- 每隔 1秒执行一次
	 * cron="0 * 17 * * ? "   -- 每天 17：00-17.59 没隔一分钟执行一次， 17.12.00 满足需求，类推 17.13.0 也满足需求，但是 17.12.01 不满足
	 * cron="0 15 10 * * ? 2005" -- 2005年  每天上午10.15.00 执行一次
	 * cron="* 46/4 17-18 * * ? "   -- 17-18点   46分开始，每增加4分钟执行，每秒执行一次。因为 17.50.0~17.50.59 都满足
	 * cron="0 46/4 17-18 * * ? "   -- 17-18点    46分开始，每增加4分钟执行，每分钟执行一次。17.50.0 满足， 17.50.1——59 都不满足
	 */
	@Scheduled(cron="0 0/10 22-23 * * ? ") 
	public void test1(){
		Thread t = Thread.currentThread();
		log.info("test222 ------>>"+t.getName());
	}
	
	
}
